/**
 * 权限相关的API接口
 */
import axios from 'axios';

/**
 * 获取当前登录用户的权限列表
 * @returns {Promise<Array>} 权限标识列表
 */
export const getUserPermissions = async () => {
  try {
    const response = await axios.get('/api/admin/permissions');
    if (response.data.code === 200) {
      return response.data.data || [];
    }
    return [];
  } catch (error) {
    console.error('获取用户权限失败:', error);
    return [];
  }
};

/**
 * 检查当前用户是否拥有指定权限
 * @param {string|Array} permission 权限标识或权限标识数组
 * @param {Array} userPermissions 用户权限列表
 * @returns {boolean} 是否拥有权限
 */
export const hasPermission = (permission, userPermissions = []) => {
  if (!permission) return true;
  
  // 调试输出
  console.log('检查权限:', permission, '用户权限:', userPermissions);
  
  // 如果是超级管理员，拥有所有权限
  if (userPermissions.includes('*')) {
    return true;
  }
  
  // 如果是数组，检查是否有其中一个权限
  if (Array.isArray(permission)) {
    return permission.some(p => hasPermission(p, userPermissions));
  }
  
  // 字符串权限直接检查 - 使用更宽松的匹配方式
  // 检查完全匹配
  const hasExactPermission = userPermissions.includes(permission);
  if (hasExactPermission) return true;
  
  // 检查用户是否有该权限的上级权限
  const permissionParts = permission.split(':');
  for (let i = permissionParts.length - 1; i > 0; i--) {
    const parentPermission = permissionParts.slice(0, i).join(':') + ':*';
    if (userPermissions.includes(parentPermission)) {
      console.log('匹配到上级权限:', parentPermission);
      return true;
    }
  }
  
  // 检查通配符权限
  if (permission.includes(':')) {
    const permissionPrefix = permission.split(':')[0];
    if (userPermissions.includes(permissionPrefix + ':*')) {
      console.log('匹配到通配符权限:', permissionPrefix + ':*');
      return true;
    }
  }
  
  console.log('权限检查失败:', permission);
  return false;
};